/**
 * 
 */
package com.I9lou.se.lurker.search;

import org.apache.lucene.search.IndexSearcher;

/**
 * IndexSearcher实例工厂
 * 
 * 注意：由于该工厂实现不要求对IndexSearcher进行缓存，外部不应该直接调用此工厂进行搜索服务。
 * {@link com.I9lou.se.lurker.search.CachedIndexSearcherFactory}
 * 
 * @author chenwei
 * @date 2011-03-09
 */
public interface IndexSearcherFactory {
	
	/**
	 * 根据搜索应用id及指定的索引文件夹列表创建并返回当前所对应的最新IndexSearcher实例。
	 * 
	 * 注意：该方法每次都会创建新的IndexSearcher实例。而IndexSearcher对象的创建消耗可能会很昂贵（取决于索引文件的大小）。
	 * 因此调用者不应在每次搜索时都通过调用此方法来获取IndexSearcher实例。在生产环境下，这可能会导致严重的性能问题。
	 * IndexSearcher实例是线程安全的，因此调用者在调用一次{@link #create(int...)}后，需要将获得的IndexSearcher对象缓存，
	 * 并用其提供搜索服务。当且仅当需要重新打开IndexSearcher（为了使索引更新可见）时，才再次调用获取新的Searcher实例。
	 * 
	 * 注意：根据接口实现方式的不同，获取的IndexSearcher对象可能需要调用者自身进行关闭操作。
	 * 
	 * @param appId 
	 * @param indexDirNames
	 * 
	 * @return searcher
	 */
	public IndexSearcher create(int appId, String[] indexDirNames);
	
}
